package d3_udp02;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
 * 需求: 多发多收
 * 注意: 先启动服务端
 */
public class Client {
    public static void main(String[] args) throws Exception {
        //实现UDP协议的通信
        //目标: 客户端实现(发送端)
        //1、创建发送端对象(抛韭菜)
        DatagramSocket socket = new DatagramSocket();//默认会分配端口
        //创建一个扫描器对象
        Scanner sc = new Scanner(System.in);

        while (true) {

            //提示用户进行输出数据
            System.out.println("请说:");
            //2、创建一个数据包对象, 负责封装要发送的数据。注意发送的是数据包里面的数据,不是数据包(这样不现实)
            /**
             * 参数一: 要发送数据,字节数组
             * 参数二: 发送的数据大小
             * 参数三: 目的地IP地址
             * 参数四: 接受端端口号
             */


            //是用nextLine()进行接受
            String message = sc.nextLine();

            //指定退出条件
            if (message.equals("exit")){
                System.out.println("退出成功");
                //进行关闭通信管道
                socket.close();
                break;//跳出循环,不然子进行获取数据,就会抛异常
            }

            //创建一个字节数据,存储要进行发送数据的字节
            byte[] buffer = message.getBytes();//使用默认编码,进行解码-->UTF-8
            // DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getLocalHost(), 8848);

            //属于一个本地回环,UDP是无连接,是不依赖网路的,如果是本地回环记性通信,是不许要经过物理网卡
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length,InetAddress.getByName("192.168.43.19"), 8848);

            //3、把这一包数据发送出去(抛出去韭菜)
            //public void send(DatagramPacket dp) 发送数据包
            socket.send(packet);
            System.out.println("--------------------------------------------------------------------------");
        }


       /* //4、释放资源(这是占用网卡资源的,一定要进行释放)
        socket.close();
        不可以关闭资源,关闭了通信管道就没有办法进行发送数据了
        */

        //最后一步,进行提示,Client已经进行数据发送
       // System.out.println("客户端已经发送完数据");
    }
}
